# 文件名称：run.ps1
# 功能说明：开发环境启动脚本（优化版）

# 错误时停止
$ErrorActionPreference = "Stop"

try {
    # 1. 检查虚拟环境是否存在
    $venvPath = "E:\DEV_VISION\.venv\Scripts\Activate.ps1"
    if (-not (Test-Path $venvPath)) {
        Write-Host "❌ 虚拟环境不存在: $venvPath" -ForegroundColor Red
        Write-Host "请先运行: python -m venv .venv" -ForegroundColor Yellow
        exit 1
    }

    # 2. 激活虚拟环境
    Write-Host "🔄 激活虚拟环境..." -ForegroundColor Yellow
    & $venvPath
    
    # 验证虚拟环境是否激活成功
    if ($env:VIRTUAL_ENV) {
        Write-Host "✅ 虚拟环境已激活: $env:VIRTUAL_ENV" -ForegroundColor Green
    } else {
        Write-Host "❌ 虚拟环境激活失败" -ForegroundColor Red
        exit 1
    }

    # 3. 设置开发环境变量
    $env:FLASK_APP = "app_dev.py"
    $env:FLASK_ENV = "development"
    $env:FLASK_DEBUG = "1"
    $env:PYTHONWARNINGS = "ignore"

    # 3.1 预检查 MySQL 服务（可通过环境变量 SKIP_MYSQL_CHECK=1 跳过）
    if (-not $env:SKIP_MYSQL_CHECK) {
        $mysqlServiceName = 'MySQL80'
        $svc = Get-Service -Name $mysqlServiceName -ErrorAction SilentlyContinue
        if (-not $svc) {
            Write-Host "⚠ 未发现 MySQL 服务 $mysqlServiceName，请确认已安装或前台手动运行 mysqld。" -ForegroundColor Yellow
        }
        elseif ($svc.Status -eq 'Stopped') {
            Write-Host "🔍 检测到 MySQL 服务处于 Stopped，尝试启动..." -ForegroundColor Yellow
            try {
                Start-Service -Name $mysqlServiceName -ErrorAction Stop
                Start-Sleep -Seconds 1
                $svc.Refresh()
                if ($svc.Status -ne 'Running') {
                    Write-Host "❌ MySQL 服务未能启动（状态：$($svc.Status)）。请在管理员 PowerShell 运行:  sc start $mysqlServiceName" -ForegroundColor Red
                    Write-Host "   或前台执行:  E:\MySQL\bin\mysqld.exe --defaults-file=E:\MySQL\my.ini" -ForegroundColor Red
                    return
                } else {
                    Write-Host "✅ MySQL 服务已启动" -ForegroundColor Green
                }
            } catch {
                Write-Host "❌ 无法启动 MySQL 服务，可能缺少管理员权限。" -ForegroundColor Red
                Write-Host "   请在“以管理员身份运行”的 PowerShell 中执行:  sc start $mysqlServiceName" -ForegroundColor Red
                Write-Host "   或直接前台: E:\MySQL\bin\mysqld.exe --defaults-file=E:\MySQL\my.ini" -ForegroundColor Red
                return
            }
        } else {
            Write-Host "✅ MySQL 服务运行中" -ForegroundColor Green
        }
    } else {
        Write-Host "⏭ 跳过 MySQL 服务检查 (SKIP_MYSQL_CHECK=1)" -ForegroundColor DarkYellow
    }

    # 4. 检查主程序文件是否存在
    if (-not (Test-Path "app_dev.py")) {
        Write-Host "❌ 主程序文件不存在: app_dev.py" -ForegroundColor Red
        exit 1
    }

    # 5. 启动开发服务器
    Write-Host "🚀 启动开发服务器..." -ForegroundColor Green
    Write-Host "📍 访问地址: http://localhost:5000" -ForegroundColor Cyan
    Write-Host "🛑 按 Ctrl+C 停止服务器" -ForegroundColor Cyan
    Write-Host "----------------------------------------" -ForegroundColor Gray
    
    python app_dev.py
}
catch {
    Write-Host "❌ 启动失败: $($_.Exception.Message)" -ForegroundColor Red
    exit 1
}
